home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Internet Info 1994 March
/
Internet Info CD-ROM (Walnut Creek) (March 1994).iso
/
networking
/
mail
/
mh
/
contrib
/
jpeek
/
xrefile
< prev
Wrap
Text File
|
1992-08-08
|
4KB
|
134 lines
#! /bin/sh
# $Header: /home/jerry/.bin/RCS/xrefile,v 1.3 92/08/09 23:26:37 jerry mh_contrib $
#
### xrefile - refile mail from current account to another
### Usage: xrefile -u other_username [msgs] [+remote-folder]
##
## LIKE refile, BUT COPIES MESSAGES TO OTHER ACCOUNT AND THEM rmm'S.
## NICER THAN dist BECAUSE IT PRESERVES THE ORIGINAL MESSAGE DATE
## AND ETC. NICER THAN forw BECAUSE THE ORIGINAL MESSAGE ISN'T
## BURIED INSIDE DASHED LINES, BECAUSE IT DOESN'T TRASH THE STARTS
## OF DASHED LINES IN THE ORIGINAL MESSAGE, AND BECAUSE pick CAN FIND
## THE ORIGINAL MESSAGE WITHOUT NEEDING TO USE -search.
##
## WATCH OUT: xrefile COPIES MESSAGES INTO A HIDDEN SUBDIRECTORY OF
## /tmp FOR LONG ENOUGH TO TRANSFER THEM. IF xrefile BOMBS BEFORE
## IT FINISHES, IT COULD LEAVE MESSAGES UNDER /tmp. (IT WON'T REMOVE
## THE MESSAGES FROM THE SOURCE FOLDER, THOUGH, UNTIL THEY'RE IN THE
## OTHER ACCOUNT'S FOLDER -- SO YOU WON'T LOSE MESSAGES IN A CRASH.)
#
# NOTE TO HACKERS: TABSTOPS SET AT 4 IN THIS CODE
#
# USE AT YOUR OWN RISK. SEEMS TO WORK, BUT IT'S YOUR RESPONSIBILITY!
# PLEASE TELL ME ABOUT BUGS AND FIXES: Jerry Peek, jerry@ora.com
mh=/usr/local/mh # WHERE mh COMMANDS LIVE
tmpdir=/tmp/.XFRDIR$$ # HIDDEN TEMPORARY DIRECTORY FOR MAIL TRANSFER
tmpscr=/tmp/.XFRSCR$$ # HIDDEN TEMPORARY SHELL SCRIPT; COPIES MESSAGES
stat=1 # ERROR EXIT STATUS (RESET TO 0 FOR NORMAL EXITS)
trap 'rm -rf $tmpdir $tmpscr; exit $stat' 0 1 2 15
myname="`basename $0`"
usage="$myname -u other_username [msgs] [+remote-folder]"
# PARSE COMMAND LINE:
while :
do
case $# in
0) break ;;
esac
case "$1" in
-u) case "$2" in
"") echo "Usage: $usage
(Missing user name after -u)" 1>&2
exit
;;
*) user="$2"
shift # SHIFT OFF -u (WILL shift $2 AT END OF LOOP)
;;
esac
;;
+*) rmtfolder="$1" ;;
*) msgs="$msgs $1" ;; # IT'S A MESSAGE (WE HOPE...)
esac
shift
done
case "$user" in
"") echo "Usage: $usage
(missing -u)" 1>&2
exit
;;
esac
if mkdir $tmpdir
then chmod 711 $tmpdir # OTHER ACCOUNT WILL KNOW EXACT FILENAMES
else
echo "${myname}: problem making '$tmpdir' directory. Quitting." 1>&2
exit
fi
: ${msgs=cur} # IF NO MESSAGES GIVEN, USE cur
# GO TO THE CURRENT FOLDER AND GET MESSAGE LIST.
# DO THIS TO MAKE PATHNAMES SHORTER; AVOIDS TOO-LONG COMMAND LINES:
srcfolder="`$mh/mhpath`" || {
echo "${myname}: fatal: can't get current folder name?!?" 1>&2
exit
}
cd "$srcfolder" || {
echo "${myname}: fatal: 'cd $srcfolder' bombed." 1>&2
exit
}
# GET LIST OF MESSAGES; LET cp COMPLAIN IF IT CAN'T READ THEM...
# (WE CAN'T JUST USE $msgs BECAUSE IT MIGHT HAVE last:10, ETC.)
# USE tr TO CHANGE NEWLINES TO SPACES SO $xfrscr DOESN'T BOMB:
cpfrom="`$mh/mhpath $msgs | sed \"s@^$srcfolder/@@\" | tr '\012' ' '`" || {
echo "${myname}: fatal: 'mhpath \$msgs | sed' bombed." 1>&2
exit
}
# MAKE THE SHELL SCRIPT THAT $user'S ACCOUNT WILL USE. IT BOMBS (-e)
# AND DOESN'T PUT MESSAGE IN $xfr_done FILE IF ANYTHING FAILS:
echo "#! /bin/sh -e
# FILE-COPYING SCRIPT MADE BY $USER
cd $tmpdir
for msg in $cpfrom
do cp -i \$msg \`$mh/mhpath new $rmtfolder\`
done
# IF WE GET HERE, NOTHING BOMBED AND cp -i DIDN'T GET ANY n ANSWERS.
# RETURN STATUS TO su SHELL (AND FROM THERE TO CALLING PROGRAM):
exit 0" > $tmpscr
chmod +x $tmpscr || exit
# NOW THAT WE'VE GOT THE SCRIPT, COPY THE MESSAGES TO $tmpdir
# (LEAVE THEM THERE AS SHORT A TIME AS WE CAN...)
cp -i $cpfrom $tmpdir || {
echo "${myname}: fatal: 'cp $cpfrom $tmpdir' bombed." 1>&2
exit
}
cd $tmpdir # MUST BE HERE OR su BOMBS (IF MH directory PROTECTED)
chmod 644 * || {
echo "${myname}: fatal: 'chmod 644 *' bombed." 1>&2
exit
}
# DO THE COPY (NOT ALL SYSTEMS LET YOU DO su -f TO A BOURNE SHELL!):
echo -n "$user " # PUT USERNAME BEFORE Password:
su $user -c $tmpscr
case $? in
0) $mh/rmm $cpfrom
stat=0
;;
*) echo "$myname: Something went wrong with the copying...
I won't remove the source messages." 1>&2 ;;
esac
exit